package main

import "fmt"

//通过加密模式得选择，设置密钥，明文，生成密文
func main() {

	//plainText := desDecrypt(cipherText,key)
	//fmt.Println("明文：",string(plainText))

	//fmt.Println("aes 加解密：")
	////aes 加解密：
	//key1 := []byte("12345678asdasdcv")
	//cipherText = aesEncrypt(str,key1)
	//fmt.Println("密文：",cipherText)
	//plainText = aesDecrypt(cipherText,key1)
	//fmt.Println("明文：",string(plainText))
	fmt.Println("加密或者解密，True or False:")
	var b bool
	fmt.Scan(&b)
	if !b {
		for {
			fmt.Println("选择DES解密或者AES解密，输入D or A")
			var choose string
			fmt.Scan(&choose)
			if choose == "D" {
				fmt.Println("des 解密：") //des 加解密：
				key := make([]byte, 0)
				fmt.Print("请输入密钥然后回车\n(中文占三位，字母数字占一位)(只能为八位)：")
				fmt.Scan(&key)
				if len(key) != 8 {
					fmt.Println("切片长度不符合")
					fmt.Println(key)
					return
				}
				fmt.Println("\n密钥为：", string(key[:]))
				fmt.Print("输入密文：")
				var strr string
				fmt.Scan(&strr)
				var str []byte = []byte(strr)
				cipherText := desDecrypt(str, key)
				fmt.Println("明文：", string(cipherText[:]))
				return
			} else if choose == "A" {
				fmt.Println("aes 解密：") //des 加解密：
				key := make([]byte, 0)
				fmt.Print("请输入密钥然后回车\n(中文占三位，字母数字占一位)(只能为16位)：")
				fmt.Scan(&key)
				if len(key) != 16 {
					fmt.Println("切片长度不符合")
					fmt.Println(key)
					return
				}
				fmt.Println("\n密钥为：", string(key[:]))
				fmt.Print("输入密文：")
				var strr string
				fmt.Scan(&strr)
				var str []byte = []byte(strr)
				cipherText := aesDecrypt(str, key)
				fmt.Println("明文：", string(cipherText[:]))
				return
			} else {
				fmt.Println("退出！")
				break
			}
		}
	} else if b {
		for {
			fmt.Println("选择DES加密或者AES加密，输入D or A")
			var choose string
			fmt.Scan(&choose)
			if choose == "D" {
				fmt.Println("des 加密：") //des 加解密：
				key := make([]byte, 0)
				fmt.Print("请输入密钥然后回车\n(中文占三位，字母数字占一位)(只能为八位)：")
				fmt.Scan(&key)
				if len(key) != 8 {
					fmt.Println("切片长度不符合")
					fmt.Println(key)
					return
				}
				fmt.Println("\n密钥为：", string(key[:]))
				var strr string
				fmt.Print("输入明文：")
				fmt.Scan(&strr)
				var str []byte = []byte(strr)
				cipherText := desEncrypt(str, key)
				fmt.Println("密文：", cipherText)
				return
			} else if choose == "A" {
				fmt.Println("aes 加密：") //des 加解密：
				key := make([]byte, 0)
				fmt.Print("请输入密钥然后回车\n(中文占三位，字母数字占一位)(只能为16位)：")
				fmt.Scan(&key)
				if len(key) != 16 {
					fmt.Println("切片长度不符合")
					fmt.Println(key)
					return
				}
				fmt.Println("\n密钥为：", string(key[:]))
				var strr string
				fmt.Print("输入明文：")
				fmt.Scan(&strr)
				var str []byte = []byte(strr)
				cipherText := aesEncrypt(str, key)
				fmt.Println("密文：", cipherText)
				return
			} else {
				fmt.Println("退出！")
				break
			}
		}
	}

}
